package com.condominio.dao;

import java.util.ArrayList;
import java.util.List;

import com.condominio.model.Conta;
import com.condominio.model.Pessoa;

/**
 *autor:Andre
 *data:07/05/2010
 *descricao:inicio do ContaDao
 *obs:versao incompleta.
 *
 */
public class ContaDao extends GenericDao<Conta>{

	public ContaDao() {
		super();
	}

	@SuppressWarnings("unchecked")
	public List<Conta> getAllContasByPessoa (Pessoa u){
		return (List<Conta>)super.findAllByQuery("SELECT c FROM Conta c WHERE c.pessoa="+u);
	}

	@SuppressWarnings("unchecked")
	public List<Conta> findAllContas() {
		return super.findAllByQuery("SELECT c FROM Conta c ORDER BY c.id");
	}


	public Conta findContaById(Conta c){

		return (Conta)super.findByQuery("SELECT c FROM Conta c WHERE c.id="+c.getId());
	}

	public Conta findContaById(int id){

		return (Conta)super.findByQuery("SELECT c FROM Conta c WHERE c.id="+id);
	}

	public Conta findContaByName(String nome){

		return (Conta)super.findByQuery("SELECT c FROM Conta c WHERE c.nome like'"+nome+"'");
	}
	//consultas especiais
	@SuppressWarnings("unchecked")
	public List<Conta> qr1PegarContasAPartirdeDezReaisPorPessoa(Pessoa p) {
		//select c from Contas c where p.valor>=10 and c.pessoa.ap = p.ap?<----c.pessoa.ap pega?
		return (List<Conta>)super.findAllByQuery("SELECT c FROM Pessoa p,IN (p.contas) c where c.valor>=10 AND p.apartamento="+p.getApartamento());
	}

	public Object qr3PegarQtdeValorContasNaoPagasByPessoa(Pessoa p){
		//"Select count(c) as quantidade,p.nome as dono from Conta c JOIN c.pessoa p where c.status=false and c.pessoa.apartamento = "+p.getApartamento()
		return (Object)super.findByQuery("Select p.nome,count(c),sum(c.valor) from Conta c JOIN c.pessoa p where c.status=false and p.apartamento = "+p.getApartamento()+"group by p.nome");
	}
	public List<Conta> qr4PegarContasNaoPagasByPessoa(Pessoa p){
		return (List<Conta>) super.findAllByQuery("SELECT c FROM Conta c WHERE c.status=false AND c.pessoa.id=" +
				"(SELECT p.id FROM Pessoa p WHERE p.apartamento="+p.getApartamento()+")");
	}
}
